/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: 
 * 系统版本: 1.0.0
 * 开发人员: zhangfb
 * 开发时间: 2019/5/30 1:03
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.hyacinth.aurora.core;

import com.hyacinth.aurora.core.context.AppConfig;
import com.hyacinth.aurora.core.scanner.ClassScanner;

import java.lang.annotation.Annotation;
import java.util.List;

/**
 * 根据条件获取相关类辅助器
 * @author zhangfb
 * @version 1.0.0.1
 * @since JDK 1.8
 */
public class ClassHelper {

    private static final AppConfig appConfig = AppConfig.INSTANCE;

    /**
     * 获取 ClassScanner
     */
    private static final ClassScanner classScanner = InstanceFactory.getClassScanner();

    /**
     * 获取基础包名中的所有类
     */
    public static List<Class<?>> getClassList() {
        return classScanner.getClassList(appConfig.getRootPackageName());
    }

    /**
     * 获取基础包名中指定父类或接口的相关类
     */
    public static List<Class<?>> getClassListBySuper(Class<?> superClass) {
        return classScanner.getClassListBySuper(appConfig.getRootPackageName(), superClass);
    }

    /**
     * 获取基础包名中指定父类或接口的相关类
     */
    public static List<Class<?>> getClassListBySuper(String packageName, Class<?> superClass) {
        return classScanner.getClassListBySuper(packageName, superClass);
    }

    /**
     * 获取基础包名中指定注解的相关类
     */
    public static List<Class<?>> getClassListByAnnotation(Class<? extends Annotation> annotationClass) {
        return classScanner.getClassListByAnnotation(appConfig.getRootPackageName(), annotationClass);
    }
}
